// ml:run = $bin < input
#include <iostream>
#include <vector>
#include <functional>
#include <queue>

using ll = long long;
int const maxn = 200007;
ll da[maxn];
ll ans[maxn];
ll n, k, x;

struct data
{
	ll v, id;
};

template <class T>
T abs(T x) { return x < 0 ? -x : x; }

bool operator<(data const& a, data const& b)
{
	return a.v > b.v;
}

int main()
{
	std::ios_base::sync_with_stdio(false);
	std::cin >> n >> k >> x;
	std::priority_queue<data> pq;
	std::priority_queue<data> tpq;
	int count = 0;
	for (ll i = 0; i < n; i++) {
		ll x; std::cin >> x;
		da[i] = x;
		if (x < 0) { count ^= 1; }
		pq.push({x, i});
		tpq.push({x < 0 ? -x : x, i});
	}
	if (count & 1) {
		for (int i = 0; i < k; i++) {
			auto now = tpq.top(); tpq.pop();
			now.v += x;
			tpq.push(now);
		}
		while (!tpq.empty()) {
			auto now = tpq.top(); tpq.pop();
			if (da[now.id] < 0) now.v = - now.v;
			ans[now.id] = now.v;
		}
	} else {
		auto now = tpq.top();
		ll tmp = (now.v + x) / x;
		/* std::cerr << tmp << " " << now.v << "\n"; */
		if (tmp > k) {
			tpq.pop();
			now.v -= k * x;
			tpq.push(now);
			while (!tpq.empty()) {
				auto now = tpq.top(); tpq.pop();
				if (da[now.id] < 0) now.v = - now.v;
				ans[now.id] = now.v;
			}
		} else {
			k -= tmp;
			if (da[now.id] < 0) da[now.id] += tmp * x;
			else da[now.id] -= tmp * x;
			tpq.pop();
			now.v = abs(da[now.id]);
			tpq.push(now);
			for (int i = 0; i < k; i++) {
				auto now = tpq.top(); tpq.pop();
				now.v += x;
				tpq.push(now);
			}
			while (!tpq.empty()) {
				auto now = tpq.top(); tpq.pop();
				if (da[now.id] < 0) now.v = - now.v;
				ans[now.id] = now.v;
			}
		}
	}
	for (int i = 0; i < n; i++)
		std::cout << ans[i] << " ";
	std::cout << "\n";
}

